package com.bsdk.install.device;

import com.alibaba.fastjson2.JSONObject;
import com.bsdk.common.core.domain.AjaxResult;
import com.bsdk.install.domain.Device;

import java.util.Date;

public interface IDeviceLockLoraService {

    /**
     * 远程开锁
     *
     * @param id 设备ID
     * @return AjaxResult
     */
    AjaxResult open(Long id);
    /**
     * 远程开锁
     *
     * @param id 设备ID
     * @return AjaxResult
     */
    AjaxResult close(Long id);

    /**
     * 设备复位
     *
     * @param id 设备ID
     * @return AjaxResult
     */
    AjaxResult reset(Long id);
    /**
     * 同步时间
     *
     * @param id 设备ID
     * @return AjaxResult
     */
    AjaxResult syncTime(Long id);

    AjaxResult syncTime(String sn ,Boolean result);


    /**
     * 批量同步时间
     * @param sns sn[]
     * @return AjaxResult
     */
    AjaxResult batchSyncTime(String[] sns,Long batchId);

    /**
     * 添加或修改用户
     *
     * @param id        设备ID
     * @param admin     是否为管理员
     * @param pw        门锁密码
     * @param startTime 开始时间 2024-01-17 11:40:00
     * @param endTime   结束时间 2024-01-18 11:40:00
     * @param userId    用户Id 编号为主动添加 ，修改
     * @return AjaxResult
     */
    AjaxResult addOrEditUser(Long id, boolean admin, String pwType,String pw, Date startTime, Date endTime, int userId);

    /**
     * 添加或修改用户
     *
     * @param id        设备ID
     * @param admin     是否为管理员
     * @param pw        门锁密码
     * @param startTime 开始时间 2024-01-17 11:40:00
     * @param endTime   结束时间 2024-01-18 11:40:00
     * @param userId    用户Id 编号为主动添加 ，修改
     * @return AjaxResult
     */
    AjaxResult addOrEditUser(Long id, boolean admin,String pwType ,String pw, Date startTime, Date endTime, JSONObject cycle,int times,int userId);


    /**
     * 激活/禁用 用户
     *
     * @param id     设备ID
     * @param active 是否为激活/禁用
     * @param userId 用户编号
     * @return AjaxResult
     */
    AjaxResult activeOrDisableUser(Long id, boolean active, int userId);

    /**
     * 通过用户ID修改密码
     *
     * @param id     设备ID
     * @param pw     密码
     * @param userId 用户编号
     * @return AjaxResult
     */
    AjaxResult editPasswordById(Long id, String pw, int userId);


    /**
     * 添加Key 运用于断网等情况救急使用，临时密码就靠此Key作为算法
     *
     * @param id  设备ID
     * @param key 加密码key 长度为6-12位 纯数字 key长度暂时只能为8 bug问题
     * @return AjaxResult
     */
    AjaxResult addKey(Long id, String key);


    /**
     * 修改用户时效
     *
     * @param id        设备ID
     * @param startTime 开始时间
     * @param endTime   结束时间
     * @param userId    用户编号
     * @return AjaxResult
     */
    AjaxResult editExpireTimeById(Long id, Date startTime, Date endTime, int userId);


    /**
     * 根据用户编号删除用户
     *
     * @param id     设备ID
     * @param userId 用户编号
     * @return AjaxResult
     */
    AjaxResult deleteUserById(Long id, int userId);


    /**
     * 获取临时密码
     *
     * @param id        设备ID
     * @param startTime 起始时间
     * @param duration  1-60 实际实现是 1会转为5 6会转为10
     * @return AjaxResult
     */
    AjaxResult getBriefPassword(Long id, Date startTime, Integer duration);


    /**
     * 获取 LockLora 实例
     *
     * @param id 设备ID
     * @return AjaxResult
     */
    AjaxResult getLockLora(Long id);

    /**
     * 获取 LockLora 实例
     *
     * @param deviceLock 设备实例
     * @return AjaxResult
     */
    AjaxResult getLockLora(Device deviceLock);


}
